package com.wyw.leetcode.learning.medium;

/**
 * @Title   leetcode topic 209 长度最小的子数组
 * @Description     给定一个含有 n 个正整数的数组和一个正整数 target 。
 *                  找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ，并返回其长度。如果不存在符合条件的子数组，返回 0
 * @Author Mr Wu yewen.wu.china@gmail.com
 * @Date 2023/10/10 16:02
 * Update History:
 * Author        Time            Content
 */
public class Topic209 {


    public static void main(String[] args) {
        int[] nums = new int[]{1,2,3,4,5};
        System.out.println(minSubArrayLen(7, nums));
    }

    public static int minSubArrayLen(int target, int[] nums) {
        int l = 0;
        int r = 0;
        int len = Integer.MAX_VALUE;
        int sum = 0;
        while (r<nums.length){
            int num = nums[r];
            r++;
            sum+=num;
            while (sum >= target) {
                len = Math.min(len,r-l);
                int num1 = nums[l++];
                sum-=num1;
            }
        }
        return len==Integer.MAX_VALUE?0:len;
    }

}
